package com.jichangxiu.server.platform.service;

import com.jichangxiu.common.entity.bo.PageData;
import com.jichangxiu.framework.mybatis.BaseService;
import com.jichangxiu.server.platform.entity.dto.PlatformUserQueryDto;
import com.jichangxiu.server.platform.entity.po.PlatformUser;
import com.jichangxiu.server.platform.entity.vo.PlatformUserAddVo;
import com.jichangxiu.server.platform.entity.vo.PlatformUserEditVo;
import com.jichangxiu.server.platform.entity.vo.PlatformUserQueryVo;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * PlatformUserService:
 *
 * @author Jcx
 * @create 2023-03-08 21:14
 */
public interface PlatformUserService extends BaseService<PlatformUser> {

    /**
     * 新增用户
     *
     * @param platformUserAddVo 用户视图对象
     * @return 是否成功
     */
    public Boolean add(PlatformUserAddVo platformUserAddVo);

    /**
     * 多选级联删除用户
     *
     * @param userIdList 用户ID列表
     * @return 是否成功
     */
    public Boolean del(List<String> userIdList);

    /**
     * 修改用户信息
     *
     * @param platformUserEditVo 用户视图对象
     * @return 是否成功
     */
    public Boolean edit(PlatformUserEditVo platformUserEditVo);

    /**
     * 根据ID获取用户详情
     *
     * @param userId 用户ID
     * @return 用户详情
     */
    public PlatformUserQueryDto info(@NotBlank(message = "用户ID不能为空") String userId);

    /**
     * 根据租户名和用户名查找用户详情
     * 这里是框架要调用的方法，不能封装为 dto 对象
     *
     * @param tenantName 租户名
     * @param username   用户名
     * @return 用户详情
     */
    public PlatformUser getUserByUsername(String tenantName, String username);

    /**
     * 根据租户名和手机号查找用户详情
     * 这里是框架要调用的方法，不能封装为 dto 对象
     *
     * @param tenantName 租户名
     * @param phone      手机号
     * @return 用户详情
     */
    public PlatformUser getUserByPhone(String tenantName, String phone);

    /**
     * 根据租户名和邮箱查找用户详情
     * 这里是框架要调用的方法，不能封装为 dto 对象
     *
     * @param tenantName 租户名
     * @param email      邮箱
     * @return 用户详情
     */
    public PlatformUser getUserByEmail(String tenantName, String email);

    /**
     * 分页查询用户列表
     *
     * @param platformUserQueryVo 用户视图对象
     * @return 分页用户列表
     */
    public PageData<PlatformUserQueryDto> pageList(PlatformUserQueryVo platformUserQueryVo);

}
